package coml.redisson.rs1;

import coml.redisson.RedisConfig;
import org.redisson.api.*;

/**
 * 使用redis操作5种基本数据类型
 */
public class BasicTypeMain {

    /**
     * RBucket：封装了Redis的string字符串；
     * RMap：封装了Redis的HashTable，也即Redis的hash命令；
     * RList：封装了Redis的List，实现了List接口；
     * RSet：封装了Redis的Set，实现了Set接口；
     * RSortedSet：封装了Redis的Zset接口；
     * RQueue：封装了Redis的list命令，实现了Queue接口；
     * RDeque：封装了Redis的list命令，实现了Deque接口；
     * RAtomicLong：封装了Redis的string（字符串），实现了原子性的long。
     * ————————————————
     * <p>
     * 文章来源：作者冰点(icepip.blog.csdn.com)
     * <p>
     * 原文链接：https://blog.csdn.net/wangshuai6707/article/details/132789959
     *
     * @param args
     */
    public static void main(String[] args) {
        // RBucket 用于对单一值进行缓存，代替 Java 中的 AtomicReference。在分布式环境中，提供了对单一值的持久化存储和原子操作。例如：
        RBucket<String> bucket = RedisConfig.redissonClient.getBucket("bucket");
        bucket.set("redisson");
        String value = bucket.get();
        System.out.println(value);
        // RMap 用于存储需要多个键值对，代替 Java 中的 HashMap。在分布式环境中，提供了 Map 实现，支持事务和原子操作。例如：
        RMap<String, Integer> map = RedisConfig.redissonClient.getMap("map");
        map.put("a", 1);
        map.put("b", 2);
        System.out.println(map.values());
        RMap<String, Integer> newMap = RedisConfig.redissonClient.getMap("map");
        System.out.println(newMap.values());
        // RList 用于有序存储多个元素，并可能存储重复元素，代替 Java 中的 ArrayList。实现了分布式环境下的可变数组，支持正向和反向遍历。例如：
        RList<Integer> list = RedisConfig.redissonClient.getList("list");
        list.add(1);
        list.add(2);
        list.add(3);
        System.out.println(list.get(1));
        // RSet 用于存储无序且不重复的多个元素，代替 Java 中的 HashSet。在分布式环境中，提供了无序集合的实现，支持常见的集合操作。例如：
        RSet<Integer> set = RedisConfig.redissonClient.getSet("set");
        set.add(1);
        set.add(2);
        set.add(3);
        System.out.println(set);
        // RSortedSet 用于有序存储元素，并能根据元素的自然顺序或自定义比较器进行排序，代替 Java 中的 TreeSet。在分布式环境下，实现了有序集合，支持快速地获取有序集中的最大或最小元素。例如：
        RSortedSet<Integer> sortedSet = RedisConfig.redissonClient.getSortedSet("sortedSet");
        sortedSet.add(3);
        sortedSet.add(1);
        sortedSet.add(2);
        System.out.println(sortedSet);
        //  RQueue 用于多个元素按一定顺序进行存储，并按该顺序进行检索，代替 Java 中的 Queue。在分布式环境中，提供了队列实现，尤其有利于实现生产者-消费者模型。例如：
        RQueue<Integer> queue = RedisConfig.redissonClient.getQueue("queue");
        queue.add(1);
//        Integer item = queue.poll();
        // RDeque 用于需要从两端插入或删除元素的数据结构，代替 Java 中的 LinkedList。在分布式环境中，提供了双端队列实现，支持从头部或尾部插入和删除元素。例如：
        RDeque<Integer> deque = RedisConfig.redissonClient.getDeque("deque");
        deque.addFirst(1);
        deque.addLast(2);
        Integer firstElement = deque.getFirst();
        Integer lastElement = deque.getLast();
        deque.delete();
        //  RAtomicLong 用于对单一值进行原子操作，如自增、自减等，代替 Java 中的 AtomicLong。在分布式环境下，进行原子增减操作，避免并发问题。例如：
        RAtomicLong atomicLong = RedisConfig.redissonClient.getAtomicLong("atomicLong");
        atomicLong.set(1);
        atomicLong.incrementAndGet();
        long atomicLongValue = atomicLong.get();


    }
}
